<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>

// 数组
// 一组数据，有序的数据集合
// 数组用于在一个变量中存储多个数据
// 数组属于object类型


// 创建数组
// var arr1 = [];// 创建空数组
// var arr2 = new Array();// 创建空数组
// var arr3 = new Array(5);// 创建一个数组长度为5
// console.log( arr1 );// []
// console.log( arr2 );// []
// console.log( arr3 );// [empty*5] => [undefined,undefined,undefined,undefined,undefined]

// var arr4 = ['a','b','c'];// 创建数组，里面有三个元素（数据）
// var arr5 = new Array('a','b','c');// 创建数组，里面有三个元素（数据）
// console.log( arr4 );// ['a', 'b', 'c']
// console.log( arr5 );// ['a', 'b', 'c']


// 数组的基本操作：
var arr = ['a','b','c'];
// 'a','b','c' 叫做数组的元素（数据）
// 数组中的元素可以是任意数据类型
// var arr = [123,'hello',true,null,function (){},{a:1},[1,2]];

// 数组中的每一个元素都对应一个索引（下标），索引始终从0开始
// 数组 ['a','b','c']
// 索引   0   1   2

// 访问数组中的元素：通过索引访问数组中的元素 -> 数组[索引]
// console.log( arr[1] );// 'b'
// console.log( arr[2] );// 'c'

// 修改数组中的元素：给指定索引位置的元素重新赋值 -> 数组[索引] = value
// arr[0] = 'a1';
// arr[1] = 'b1';
// arr[2] = 'c1';
// console.log( arr );// ['a1', 'b1', 'c1']

// 数组的length属性：返回数组的长度（元素的个数）
// 修改数组的length属性值，可以控制数组的元素个数
// arr.length 数组的长度
// arr.length-1 数组最后一个元素的索引
// arr[arr.length] = value 向数组末尾添加一个元素
// console.log( arr.length );// 3
// console.log( arr[arr.length-1] );// 'c'
// arr[arr.length] = 'd';// 向arr末尾添加一个元素
// console.log( arr );// ['a', 'b', 'c', 'd']

// 访问数组长度之外的元素，不会报错，返回undefined
// console.log( arr[5] );// undefined
// console.log( arr[10] );// undefined


// 清空数组：
// var arr = ['a','b','c'];
// arr = [];// 重新赋值
// arr.length = 0;// 清空数组，推荐
// console.log( arr );// []


// 注意点：
// 1.最后一个元素后可以有逗号，不影响数组长度（不推荐）
// var arr1 = ['a','b','c',];
// console.log( arr1 );

// 2.数组元素之间如果有多个逗号，会影响数组长度（避免这种情况）
// var arr2 = ['a',,,'b','c'];
// console.log( arr2.length );// 5 
// console.log( arr2[1] );// undefined
// console.log( arr2[2] );// undefined

// 3.数组的索引是否可以为负数？可以，一定不要这么干！
var arr3 = ['c'];
arr3[-1] = 'b';
arr3[-2] = 'a';
console.log( arr3 );// ['c', -1: 'b', -2: 'a']
console.log( arr3.length );// 1


// 遍历数组（分别把数组中的数据取出来）
var arr = ['a','b','c'];
// 1.使用for循环遍历
// for (var i = 0; i < arr.length; i++){
//     console.log( i );// 0 1 2
//     console.log( arr[i] );// 'a'  'b'  'c'
// }

// 2.使用for/in遍历数据（谨慎使用）
// for (var i in arr){
//     console.log( i );// '0' '1' '2'
//     console.log( arr[i] );// 'a'  'b'  'c'
// }

var arr6 = ['a',,,'b','c'];
// console.log( arr6[1] );// undefined
// console.log( arr6[2] );// undefined

// for (var i = 0; i < arr6.length; i++){
//     console.log( arr6[i] );// 'a' undefined undefined 'b' 'c'
// }

for (var i in arr6){
    // 值为undefined的元素不会被for/in遍历出来
    console.log( i );// '0'  '3'  '4'
    console.log( arr6[i] );// 'a'  'b'  'c'
}

</script>
</body>
</html>